home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 February: Tool Chest / Dev.CD Feb 95 / Dev.CD Feb 95.toast / Tool Chest / Development Tools & Languages / Dylan Related / Mindy-1.1 (sources only) / mindy-1.1 / interp / value.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-28  |  2.4 KB  |  96 lines  |  [TEXT/ttxt]

  1. /**********************************************************************\
  2. *
  3. *  Copyright (c) 1994  Carnegie Mellon University
  4. *  All rights reserved.
  5. *  
  6. *  Use and copying of this software and preparation of derivative
  7. *  works based on this software are permitted, including commercial
  8. *  use, provided that the following conditions are observed:
  9. *  
  10. *  1. This copyright notice must be retained in full on any copies
  11. *     and on appropriate parts of any derivative works.
  12. *  2. Documentation (paper or online) accompanying any system that
  13. *     incorporates this software, or any part of it, must acknowledge
  14. *     the contribution of the Gwydion Project at Carnegie Mellon
  15. *     University.
  16. *  
  17. *  This software is made available "as is".  Neither the authors nor
  18. *  Carnegie Mellon University make any warranty about the software,
  19. *  its performance, or its conformity to any specification.
  20. *  
  21. *  Bug reports, questions, comments, and suggestions should be sent by
  22. *  E-mail to the Internet address "gwydion-bugs@cs.cmu.edu".
  23. *
  24. ***********************************************************************
  25. *
  26. * $Header: value.c,v 1.2 94/06/27 16:32:40 wlott Exp $
  27. *
  28. * This file implements value cells.
  29. *
  30. \**********************************************************************/
  31.  
  32. #include "mindy.h"
  33. #include "gc.h"
  34. #include "obj.h"
  35. #include "class.h"
  36. #include "value.h"
  37.  
  38. struct value_cell {
  39.     obj_t class;
  40.     obj_t value;
  41. };
  42.  
  43. static obj_t obj_ValueCellClass = NULL;
  44.  
  45. obj_t make_value_cell(obj_t value)
  46. {
  47.     obj_t res = alloc(obj_ValueCellClass, sizeof(struct value_cell));
  48.  
  49.     obj_ptr(struct value_cell *, res)->value = value;
  50.  
  51.     return res;
  52. }
  53.  
  54. obj_t value_cell_ref(obj_t value_cell)
  55. {
  56.     return obj_ptr(struct value_cell *, value_cell)->value;
  57. }
  58.  
  59. obj_t value_cell_set(obj_t value_cell, obj_t value)
  60. {
  61.     return obj_ptr(struct value_cell *, value_cell)->value = value;
  62. }
  63.  
  64.  
  65. /* GC Routines */
  66.  
  67. static int scav_value_cell(struct object *ptr)
  68. {
  69.     scavenge(&((struct value_cell *)ptr)->value);
  70.     return sizeof(struct value_cell);
  71. }
  72.  
  73. static obj_t trans_value_cell(obj_t value_cell)
  74. {
  75.     return transport(value_cell, sizeof(struct value_cell));
  76. }
  77.  
  78. void scavenge_value_roots(void)
  79. {
  80.     scavenge(&obj_ValueCellClass);
  81. }
  82.  
  83.  
  84. /* Init stuff */
  85.  
  86. void make_value_classes(void)
  87. {
  88.     obj_ValueCellClass = make_builtin_class(scav_value_cell, trans_value_cell);
  89. }
  90.  
  91. void init_value_classes(void)
  92. {
  93.     init_builtin_class(obj_ValueCellClass, "<value-cell>",
  94.                obj_ObjectClass, NULL);
  95. }
  96.